package org.liang.job.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.liang.job.SchedulerFetcher;
import org.liang.job.beans.Cron;
import org.liang.job.beans.Job;
import org.liang.job.beans.JobInfo;
import org.liang.job.beans.TriggerInfo;
import org.liang.job.repository.SchedulerFetchRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 自动任务查询器.
 * 
 * <pre>
 * 提供一下行为：
 * 1. 查询所有任务
 * 2. 根据 任务编号 查询任务信息（所有信息）
 * 3. 根据 任务编号 查询任务信息（基本信息）
 * 4. 根据 任务标题查 询任务
 * 5. 根据 任务组 查询任务
 * 6. 根据 任务编号 获取触发器
 * 7. 查询所有触发器
 * 8. 根据 触发器组 查询触发器
 * 9. 根据 触发时间串 查询触发器
 * </pre>
 *
 * @author L.Yang
 * @version 1.0, 2015年10月21日
 */
@Service("schedulerFetcher")
public class SchedulerFetcherImpl implements SchedulerFetcher {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private SchedulerFetchRepository schedulerFetchRepository;

    @Override
    public List<JobInfo> queryAllJobs() {
        return schedulerFetchRepository.queryAllJobs();
    }

    @Override
    public Job queryJobById(String jobId) {
        try {
            Job job = new Job();
            JobInfo info = schedulerFetchRepository.queryJobById(jobId);
            BeanUtils.copyProperties(jobId, info);

            List<Map<String, Object>> params = schedulerFetchRepository.fetchParamsByJobId(jobId);
            Map<String, Object> args = new HashMap<String, Object>();
            for (Map<String, Object> param : params) {
                args.put(param.get("P_KEY").toString(), param.get("P_VAL"));
            }
            job.setArgs(args);

            List<Cron> crons = schedulerFetchRepository.fetchCronsByJobId(jobId);
            job.setCrons(crons);
            return job;
        } catch (Exception e) {
            logger.error("获取任务信息出错：{} ", e);
            return null;
        }
    }

    @Override
    public JobInfo queryJobInfoById(String jobId) {
        return schedulerFetchRepository.queryJobById(jobId);
    }

    @Override
    public List<JobInfo> queryJobsByTitle(String title) {
        return schedulerFetchRepository.queryJobsByTitle(title);
    }

    @Override
    public List<JobInfo> queryJobsByGroup(String groupid) {
        return schedulerFetchRepository.queryJobsByGroupId(groupid);
    }

    @Override
    public List<TriggerInfo> fetchTriggersByJobId(String jobid) {
        return schedulerFetchRepository.fetchTriggersByJobId(jobid);
    }

    @Override
    public List<TriggerInfo> queryAllTriggers() {
        return schedulerFetchRepository.queryAllTriggers();
    }

    @Override
    public List<TriggerInfo> queryTriggersByGroup(String group) {
        return schedulerFetchRepository.queryTriggersByGroup(group);
    }

    @Override
    public List<TriggerInfo> queryTriggersByCron(String cron) {
        return schedulerFetchRepository.queryTriggersByCron(cron);
    }
}
